/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package treegen;

import java.math.BigDecimal;
import java.text.DecimalFormat;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.FontPosture;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;

/**
 *
 * @author Сергей
 */
public class TrunkPanel {
    
    public VBox mainPane = new VBox();
    
    private NumberSpinner widthSpinner = new NumberSpinner(BigDecimal.valueOf(0.00), new BigDecimal("1.00"), new DecimalFormat("#,##0.00"),(float)0.00, (float)150);
    private HBox width = new HBox();
    
    private NumberSpinner heightSpinner = new NumberSpinner(BigDecimal.valueOf(0.00), new BigDecimal("1.00"), new DecimalFormat("#,##0.00"),(float)0.00, (float)100.0);
    private HBox height = new HBox();    
    
    private ComboBox comboShape = new ComboBox();
    private HBox shape = new HBox();
    
    private ComboBox comboTrunkCount = new ComboBox();
    private HBox truncCount = new HBox();
    
    private NumberSpinner hStartBranchesSpinner = new NumberSpinner(BigDecimal.valueOf(0.00), new BigDecimal("1.00"), new DecimalFormat("#,##0.00"),(float)0.00, (float)100.0);
    private HBox hStartBranches = new HBox();
     
    private NumberSpinner divisionCountSpinner = new NumberSpinner((float)0, (float)5);
    private HBox  divisionCount = new HBox();
    
    private NumberSpinner hStartDivisionSpinner = new NumberSpinner(BigDecimal.valueOf(0.00), new BigDecimal("1.00"), new DecimalFormat("#,##0.00"),(float)0.00, (float)100.0);
    private HBox  hStartDivision = new HBox();
    
    private ComboBox comboTexture = new ComboBox();
    private HBox texture = new HBox();
    
    private ImageView image;
    
    private Text text;
    
    private HBox reset = new HBox();
    private Button buttonReset = getButton("Сбросить");
    
    //Фактуры коры
    private HBox smooth = new HBox();
    private HBox plastic = new HBox();
    private HBox smallCrack = new HBox();
    private HBox largeCrack = new HBox();
    private HBox imageBox = new HBox();
    
    //Формы ствола
    private HBox vertical = new HBox();
    private HBox sloping = new HBox();
    private HBox curved = new HBox();    
    
    public TrunkPanel() {
        //=== 1. Ширина ствола ===
        Text widthText = new Text("Ширина ствола:");
        widthText.setFont(Font.font("Verdana", FontPosture.ITALIC, 14));
        width.getChildren().addAll(widthText, widthSpinner);
        width.setPadding(new Insets(0, 0, 10, 0));
        
        // === 2. Высота ствола ===
        Text heightText = new Text("Высота ствола:");
        heightText.setFont(Font.font("Verdana", FontPosture.ITALIC, 14));
        height.getChildren().addAll(heightText, heightSpinner);
        height.setPadding(new Insets(0, 0, 10, 0));
        
        //=== 3. Форма ствола ===
        //прямой ствол
        text = new Text("Прямой");
        text.setFont(Font.font("Verdana", 12));
        vertical.getChildren().addAll(text);
        
        //наклонный ствол
        text = new Text("Наклонный");
        text.setFont(Font.font("Verdana", 12));
        sloping.getChildren().addAll(text);
        
        //изогнутый ствол
        text = new Text("Изогнутый");
        text.setFont(Font.font("Verdana", 12));
        curved.getChildren().addAll(text);
        
        //Комбобокс для формы ствола
        comboShape.getItems().addAll(vertical, sloping, curved);
        
        //Виджет для формы ствола
        text = new Text("Форма ствола: ");
        text.setFont(Font.font("Verdana", FontPosture.ITALIC, 14));
        shape.getChildren().addAll(text, comboShape);
        shape.setPadding(new Insets(0, 0, 10, 0));
        
        //=== 4. Количество стволов ===        
        // Виджет для числа стволов
        Text textTrunckCount = new Text("Количество стволов: ");
        textTrunckCount.setFont(Font.font("Verdana", FontPosture.ITALIC, 14));
        comboTrunkCount = new ComboBox();
        comboTrunkCount.getItems().addAll(0,1,2,3,4,5);
        comboTrunkCount.setValue(0);
        
        truncCount.getChildren().addAll(textTrunckCount, comboTrunkCount);
        truncCount.setPadding(new Insets(0, 0, 10, 0));
        
        //=== 5. Высота начала ветвей ===
        Text hStartBranchesText = new Text("Высота начала ветвей:");
        hStartBranchesText.setFont(Font.font("Verdana", FontPosture.ITALIC, 14));
        hStartBranches.getChildren().addAll(hStartBranchesText, hStartBranchesSpinner);
        hStartBranches.setPadding(new Insets(0, 0, 10, 0));
        
        //=== 6. Количество разветвлений ===
        Text divisionCountText = new Text("Количество разветвлений:");
        divisionCountText.setFont(Font.font("Verdana", FontPosture.ITALIC, 14));
        divisionCount.getChildren().addAll(divisionCountText, divisionCountSpinner);
        divisionCount.setPadding(new Insets(0, 0, 10, 0));
        
        //=== 7. Высота начала разветвлений ===
        Text hStartDivisionText = new Text("Высота начала разветвлений:");
        hStartDivisionText.setFont(Font.font("Verdana", FontPosture.ITALIC, 14));
        hStartDivision.getChildren().addAll(hStartDivisionText, hStartDivisionSpinner);
        hStartBranches.setPadding(new Insets(0, 0, 10, 0));
        
        //=== 8. Фактура коры ===
        //С гладкой корой
        text = new Text("С гладкой корой");
        text.setFont(Font.font("Verdana", 12));
        smooth.getChildren().addAll(text);
        
        //С пластичной корой
        text = new Text("С пластичной корой");
        text.setFont(Font.font("Verdana", 12));
        plastic.getChildren().addAll(text);
        
        //С мелкотрещиноватой корой
        text = new Text("С мелкотрещиноватой корой");
        text.setFont(Font.font("Verdana", 12));
        smallCrack.getChildren().addAll(text);
        
        //С глубокотрещиноватой корой
        text = new Text("С глубокотрещиноватой корой");
        text.setFont(Font.font("Verdana", 12));
        largeCrack.getChildren().addAll(text);
        
        //Комбобокс для фактуры коры
        comboTexture.getItems().addAll(smooth, plastic, smallCrack, largeCrack);
        comboTexture.getSelectionModel().selectedItemProperty().addListener(
            new ChangeListener() {
            @Override
                public void changed(ObservableValue ov, Object t, Object t1) {
                    build();
                }
            });
        
        //Виджет для фактуры коры
        image = new ImageView(new Image(BranchLevel.class.getResourceAsStream("pictures/emptiness.png")));
        imageBox.getChildren().addAll(image);
        imageBox.setPadding(new Insets(0, 0, 10, 0));
        
        text = new Text("Фактура коры: ");
        text.setFont(Font.font("Verdana", FontPosture.ITALIC, 14));
        texture.getChildren().addAll(text, comboTexture);
        texture.setPadding(new Insets(0, 0, 10, 0));
                   
        //Кнопка "Сбросить"
        text = new Text ("Сбросить");
        text.setFont(Font.font("Verdana", FontWeight.BOLD, 14));
        buttonReset.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent mouseEvent) {
                clean();
            }
        });

        reset.getChildren().add(buttonReset);
        reset.setPadding(new Insets(0, 0, 0, 10));
        
        mainPane.getChildren().addAll(width, height, shape, truncCount, hStartBranches, divisionCount, hStartDivision, texture, imageBox, reset);
        mainPane.setPadding(new Insets(5, 0, 5, 10));
    }
    /** 
     * Получить кнопку в нужном стиле
     * @param text текст кнопки
     * @return кнопка
     */
    private Button getButton (String text) {
        Button button = new Button(text);
        button.setStyle("-fx-background-color:grey;");
        button.setTextFill(Color.WHITE);
        button.setFont(Font.font("Verdana", FontWeight.BOLD, 12));
        return button;
    }
    
    public void clean(){
        comboTexture.setValue(smooth);
        comboShape.setValue(vertical);
    }
    
    public void build() {
        imageBox.getChildren().clear();
        String str = ((Text)((HBox)comboTexture.getValue()).getChildren().get(0)).getText();
        if(str.equals("С гладкой корой")) {
            image = new ImageView(new Image(BranchLevel.class.getResourceAsStream("pictures/smooth.png")));
            imageBox.getChildren().addAll(image); 
        } else if (str.equals("С пластичной корой")) {
            image = new ImageView(new Image(BranchLevel.class.getResourceAsStream("pictures/plastic.png")));
            imageBox.getChildren().addAll(image); 
        }else if (str.equals("С мелкотрещиноватой корой")){
            image = new ImageView(new Image(BranchLevel.class.getResourceAsStream("pictures/smallCrack.png")));
            imageBox.getChildren().addAll(image); 
        }else if (str.equals("С глубокотрещиноватой корой")){
            image = new ImageView(new Image(BranchLevel.class.getResourceAsStream("pictures/largeCrack.png")));
            imageBox.getChildren().addAll(image); 
        }
    }
    
    public double getWidth(){
        return 0;
        
    }
    
    public double getHeight(){
        return 0;
    
}
    
    public int getShape(){
        return 0;
        
    }
    
    public int getTruncCount(){
        return 0;
        
    }
    
    public double getHStartBranches(){
        return 0;
    
    }
    
    public int getDivisionCount(){
        return 0;
        
    }
    
    public double getHStartDivision(){
        return 0;
        
    }
    
    public int getTexture(){
        return 0;
        
    }
}
